package com.fatgirl.patterns.state.fsm
{
	import com.fatgirl.patterns.iterator.IIterator;
	import com.fatgirl.patterns.state.IStateControl;

	/**
	 *  
	 * 一个抽象状态类
	 * 不建议 实例化此基类
	 * @author iceman
	 * 
	 */
	internal class AbsFSMState implements IFSMState
	{
		protected var m_controller:IStateControl;
		private var m_parent:IFSMState;
		private var m_type:int;
		/**
		 * 抽象状态基类 构造 
		 * @param _type 类型
		 * @param _controller 状态控制器
		 * 
		 */
		public function AbsFSMState(_type:int,_controller:IStateControl = null)
		{
			m_type = _type;
			m_controller = _controller;
		}
		
		/**
		 * 获取状态类型ID 
		 * @return 返回类型ID
		 * 
		 */
		public function getType():int
		{
			return m_type;
		}
		/**
		 *  进入状态调用
		 * 	有需求请在子类覆盖重写默认为空
		 * 
		 */
		public function enter():void
		{
		}

		/**
		 * 状态更新调用
		 * 有需求请在子类覆盖重写默认为空 
		 * 
		 */
		public function update():void
		{
		}
		/**
		 * 离开状态调用
		 * 有需求请在子类覆盖重写默认为空
		 * 
		 */
		public function exit():void
		{
		}
		/**
		 * 状态初始化 
		 * 
		 */
		public function init():void
		{
			
		}
		/**
		 * 获取父节点 
		 * @return 
		 * 
		 */
		public function getParent():IFSMState
		{
			return m_parent;
		}
		/**
		 * 设置父节点 
		 * @param _parent
		 * 
		 */
		public function setParent(_parent:IFSMState):void
		{
			m_parent = _parent;
		}
		//---------------------------集合方法--------------------------------//
		
		/**
		 * 添加子状态 
		 * @param _state
		 * 
		 */
		public function addItem(_state:IFSMState):void
		{
			
		}
		/**
		 * 进行状态变迁 
		 * @param _goal 变迁目标ID
		 * 
		 */
		public function transitionState(_goal:int):void
		{
			
		}
		/**
		 * 设置默认状态 
		 * @param _state 状态对象
		 * 
		 */
		public function setDefaultState(_state:IFSMState):void
		{
			
		}
		/**
		 * 获取默认状态 
		 * @return 
		 * 
		 */
		public function getDefaultState():IFSMState
		{
			return null;
		}
		
		/**
		 * 返回迭代器 
		 * @param _type
		 * @return 
		 * 
		 */
		public function iterator(_type:String = null):IIterator
		{
			return null;
		}
	}
}